﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>NDK</title>
<meta name="GENERATOR" content="WinCHM">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style type="text/css">
<!--
.style1 {
	color: #000000;
	font-weight: bold;
}
-->
</style>
</head>

<body>
<P><A 
href="http://taminhjp.blogspot.com/2011/07/lap-trinh-ndk-tren-android.html">http://taminhjp.blogspot.com/2011/07/lap-trinh-ndk-tren-android.html</A><BR><A 
href="http://gtv11.blogspot.com/2011/04/android-ndk.html">http://gtv11.blogspot.com/2011/04/android-ndk.html</A> 
   </P>
<P>Lập 
trình NDK trên Android</P>
<DIV class=post-header 
style="MARGIN: 0px 0px 1.5em; WORD-SPACING: 0px; FONT: 13px/1.6 Arial, Tahoma, Helvetica, FreeSans, sans-serif; TEXT-TRANSFORM: none; COLOR: rgb(102,102,102); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal;  orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px">
<DIV class=post-header-line-1></DIV></DIV>
<DIV class="post-body entry-content" id=post-body-4239716906492654525 
style="FONT: 13px/18px Arial, Tahoma, Helvetica, FreeSans, sans-serif; orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px">


<DIV>
<a style="MARGIN-LEFT: 1em; MARGIN-RIGHT: 1em" 
href="http://1.bp.blogspot.com/--cKeetuvP2o/TjQfhrFoBhI/AAAAAAAAASo/u7PdxWnYmhc/s1600/main.jpg" 
imageanchor="1"><img 
style="FLOAT: 
left" 
height=160 
src="http://1.bp.blogspot.com/--cKeetuvP2o/TjQfhrFoBhI/AAAAAAAAASo/u7PdxWnYmhc/s320/main.jpg" width=320 border=0></a>Như ta biết, NDK là một bộ thư viện tương đối hữu 
  ích để cung cấp môi trường cho Android có thể sử dụng các hàm cuả C hay C++. Tôi 
  thử nghiệm thiết lập môi trường cho Android để chạy chương trình C, C++ trong 
  bài này.<br>
Nội dung sẽ bao gồm các bước sau:<br>
1. Cài đặt NDK<br>
2. Chạy thử 
  chương trình HelloJni</DIV>
  
  <div style="CLEAR: both"></div>
  
  <h1><span class="style1">Cài đặt NDK</span></h1>
<p><span class="style1">Download NDK </span>taị link 
  sau:<SPAN class=Apple-converted-space>&nbsp;</SPAN><A 
style="COLOR: rgb(33,152,166); TEXT-DECORATION: none" 
href="http://developer.android.com/intl/ja/sdk/ndk/index.html">http://developer.android.com/intl/ja/sdk/ndk/index.html</A>&nbsp;(<STRONG><FONT 
color=#ff0000>trong gói download về có một số ví dụ đặc trưng về 
ndk</FONT></STRONG>)<br>
   <span class="style1">Windows : <br>
   Cài đặt Cygwin</span> vì android-ndk cần sử dụng môi trường linux để complie C, C++ source code nên chúng ta cần môi trường Linux giả lập trên Windows. &nbsp;Tải về và cài đặt Cygwin theo theo&nbsp;địa chỉ sau: 
   <a href="http://cygwin.com/setup.exe">http://cygwin.com/setup.exe</a> <br>
Cài đặt, khi hộp thoại cho phép bạn lựa chọn các components sẽ cài đặt, chọn cài đặt thêm&nbsp;<strong>make</strong>&nbsp;trong&nbsp;<strong>Devel</strong>&nbsp;và&nbsp;<strong>Bashs</strong>&nbsp;trong&nbsp;<strong>shell</strong><br>
<strong><img src="http://pielot.org/wp-content/uploads/2010/12/cygwin-make.jpg" alt="Cygwin" width="400" height="201"></strong><br>


Theo mặc địch Cygwin được cài vào C:\cygwin. </p>
<h1><span class="style1">Các bước chính để biên dịch một ứng dụng chứa native code</span></SPAN></h1>
<table width="100%" border="0">
  <tr>
    <td width="50%">b1. Tạo thư mục&nbsp;<strong>jni</strong>&nbsp;trong project của bạn</td>
    <td>đặt các native code vào trong thư mục này. Giả sử đường dẫn đến thư mục này là&nbsp;<strong>&lt;project&gt;/jni</strong></td>
  </tr>
  <tr>
    <td>b2. Tạo file&nbsp;<strong>&lt;project&gt;/jni/Android.mk</strong></td>
    <td>và viết mô tả native code&nbsp;</td>
  </tr>
  <tr>
    <td>b3. Tạo file&nbsp;<strong>&lt;project&gt;/jni/Application.mk</strong></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>b4. Sử dụng môi trường giả lập cygwin để biên dịch native code</td>
    <td> <p>cd   &lt;project&gt;<br>
      &lt;ndk&gt;/ndk-build</p>
    </td>
  </tr>
  <tr>
    <td>b5. Biên dịch lại project sử dung SDK</td>
    <td>&nbsp;</td>
  </tr>
</table>
<p><STRONG> Để hiểu cụ thể hơn về NDK chúng ta sẽ tạo và chạy thử một ứng dụng đơn giản (hello-jni trong Android NDK sample) kết hợp giữa native code ( C/C++) và Java code.<br>
Giả sử&nbsp;Android 
NDK và Cygwin được cài đặt vào các thư mục: C:\android-ndk-r5b 
vàC:\cygwin.&nbsp;</STRONG>
             </p>
<table width="100%" border="0">
  <tr>
    <td width="50%">b1. Mở Eclipse, chọn&nbsp;<strong>File&gt; New Android Project</strong></td>
    <td>Chọn&nbsp;<strong>Create from existing source<br>
     Chọn&nbsp;<strong>API level</strong>&nbsp;cao hơn&nbsp;<strong>Andorid 1.5<br>
     Chọn&nbsp;<strong>Location</strong>&nbsp;và browse đến thư mục&nbsp;<strong>C:\android-ndk-r5b\samples\hello-jni<br>
     Chọn&nbsp;<strong>Finish</strong></strong></strong></strong></td>
  </tr>
  <tr>
    <td>b6. Mở&nbsp;<strong>Cygwin</strong>&nbsp;, thực hiện biên dịch native code sử dụng các lệnh sau:</td>
    <td>cd /cygdrive/c/android-ndk-r5b/samples/hello-jni <br>
/cygdrive/c/android-ndk-r5b/samples/hello-jni </td>
  </tr>
  <tr>
    <td> b7. Mở elcipse, chọn project hiện thời là hello-jni, nhấn Ctrl + F11. Kết quả thu được như hình dưới&nbsp;</td>
    <td><a href="http://3.bp.blogspot.com/-pLOVk3uJrEU/TZ_QeQlCeJI/AAAAAAAAAB0/2345R_yZE_0/s1600/hello-jni.bmp" imageanchor="1"><img src="http://3.bp.blogspot.com/-pLOVk3uJrEU/TZ_QeQlCeJI/AAAAAAAAAB0/2345R_yZE_0/s1600/hello-jni.bmp" alt="NDK" border="0"></a></td>
  </tr>
</table>
<br>
  <div></div>

<div>
<br>
<p>&nbsp;</p>
<p>1.2 Thiết lập môi trương cho NDK.<BR>
  Ta giải nén 
  file down về rồi đổi tên thành android-ndk và thiêts lập môi trường như sau 
  trong file .barch cuả hệ thống.<BR>
</p>
<BLOCKQUOTE 
style="PADDING-RIGHT: 20px; PADDING-LEFT: 50px; PADDING-BOTTOM: 20px; MARGIN: 0px 20px; FONT: 0.9em Helvetica, verdana, serif, Georgia, 'Times New Roman'; COLOR: rgb(199,202,207); PADDING-TOP: 20px; BACKGROUND-COLOR: rgb(72,75,82); background-origin: initial; background-clip: initial">export 
  ANDROID_NDK_ROOT=~/android-ndk<BR>export 
  PATH=$PATH:$ANDROID_NDK_ROOT<BR>export 
NDK_ROOT=~/android-ndk</BLOCKQUOTE>&nbsp;&nbsp;&nbsp;Sau đó chạy thử lệnh ndk-build. Nếu có 
kết quả hiển thị là OK.<BR>
<span class="style1">Chạy thử chương trình HelloJni</span><BR>
2.1 Khởi 
động Eclipse và taọ mới project HelloJni<BR>2.2 Tạo mới thư mục jni và trong đó 
tạo mới file Android.mk và hello-jni.c.<BR>
<DIV class=separator style="CLEAR: both; TEXT-ALIGN: center"><A 
style="MARGIN-LEFT: 1em; COLOR: rgb(33,152,166); MARGIN-RIGHT: 1em; TEXT-DECORATION: none" 
href="http://1.bp.blogspot.com/-GGZgehZqwVc/TjQmzoHmeJI/AAAAAAAAASw/glIPlLNf3a0/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%25EF%25BC%25882011-07-31+0.43.53%25EF%25BC%2589.png" 
imageanchor="1"><IMG 
style="PADDING-RIGHT: 8px; PADDING-LEFT: 8px; PADDING-BOTTOM: 8px; BORDER-TOP-STYLE: none; PADDING-TOP: 8px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; POSITION: relative; BORDER-BOTTOM-STYLE: none" 
src="http://1.bp.blogspot.com/-GGZgehZqwVc/TjQmzoHmeJI/AAAAAAAAASw/glIPlLNf3a0/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%25EF%25BC%25882011-07-31+0.43.53%25EF%25BC%2589.png" 
border=0></A></DIV>&nbsp;&nbsp;&nbsp;Android.mk<BR>
<BLOCKQUOTE 
style="PADDING-RIGHT: 20px; PADDING-LEFT: 50px; PADDING-BOTTOM: 20px; MARGIN: 0px 20px; FONT: 0.9em Helvetica, verdana, serif, Georgia, 'Times New Roman'; COLOR: rgb(199,202,207); PADDING-TOP: 20px; BACKGROUND-COLOR: rgb(72,75,82); background-origin: initial; background-clip: initial"><I>LOCAL_PATH 
  := $(call my-dir)<BR>include $(CLEAR_VARS)<BR>LOCAL_MODULE&nbsp;&nbsp;&nbsp; 
  := HelloJni<BR>LOCAL_SRC_FILES := hello-jni.c<BR>include 
  $(BUILD_SHARED_LIBRARY)</I></BLOCKQUOTE>hello-jni.c<BR>
<BLOCKQUOTE 
style="PADDING-RIGHT: 20px; PADDING-LEFT: 50px; PADDING-BOTTOM: 20px; MARGIN: 0px 20px; FONT: 0.9em Helvetica, verdana, serif, Georgia, 'Times New Roman'; COLOR: rgb(199,202,207); PADDING-TOP: 20px; BACKGROUND-COLOR: rgb(72,75,82); background-origin: initial; background-clip: initial"><I>#include 
  &lt;string.h&gt;<BR>#include 
  &lt;jni.h&gt;<BR><BR>jstring<BR>Java_com_example_hellojni_HelloJni_stringFromJNI( 
  JNIEnv* 
  env,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  jobject thiz )<BR>{<BR>&nbsp;&nbsp;&nbsp; return (*env)-&gt;NewStringUTF(env, 
  "Hello from JNI ! Adroid &amp; NDK");<BR>}</I></BLOCKQUOTE>2.3 Viết lại 
Activity<BR>
<BLOCKQUOTE 
style="PADDING-RIGHT: 20px; PADDING-LEFT: 50px; PADDING-BOTTOM: 20px; MARGIN: 0px 20px; FONT: 0.9em Helvetica, verdana, serif, Georgia, 'Times New Roman'; COLOR: rgb(199,202,207); PADDING-TOP: 20px; BACKGROUND-COLOR: rgb(72,75,82); background-origin: initial; background-clip: initial"><I>public 
  class HelloJni extends Activity<BR>{<BR>&nbsp;&nbsp;&nbsp; /** Called when the 
  activity is first created. */<BR>&nbsp;&nbsp;&nbsp; 
  @Override<BR>&nbsp;&nbsp;&nbsp; public void onCreate(Bundle 
  savedInstanceState)<BR>&nbsp;&nbsp;&nbsp; 
  {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  super.onCreate(savedInstanceState);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  TextView&nbsp; tv = new 
  TextView(this);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tv.setText( 
  stringFromJNI() );<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  setContentView(tv);<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; public 
  native String&nbsp; stringFromJNI();<BR>&nbsp;&nbsp;&nbsp; public native 
  String&nbsp; unimplementedStringFromJNI();<BR>&nbsp;&nbsp;&nbsp; static 
  {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  System.loadLibrary("hello-jni");<BR>&nbsp;&nbsp;&nbsp; 
}<BR>}</I></BLOCKQUOTE>2.4 Compile C source file<BR>
<DIV class=separator style="CLEAR: both; TEXT-ALIGN: center"><A 
style="MARGIN-LEFT: 1em; COLOR: rgb(33,152,166); MARGIN-RIGHT: 1em; TEXT-DECORATION: none" 
href="http://4.bp.blogspot.com/-7UXPF-k0NMo/TjQoS4wphnI/AAAAAAAAAS0/6mfKY_ncc08/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%25EF%25BC%25882011-07-31+0.50.04%25EF%25BC%2589.png" 
imageanchor="1"><IMG 
style="PADDING-RIGHT: 8px; PADDING-LEFT: 8px; PADDING-BOTTOM: 8px; BORDER-TOP-STYLE: none; PADDING-TOP: 8px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; POSITION: relative; BORDER-BOTTOM-STYLE: none" 
height=61 
src="http://4.bp.blogspot.com/-7UXPF-k0NMo/TjQoS4wphnI/AAAAAAAAAS0/6mfKY_ncc08/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%25EF%25BC%25882011-07-31+0.50.04%25EF%25BC%2589.png" 
width=320 border=0></A></DIV>Trở lại Eclipse, nhấn F5 ta sẽ thấy thư viện được 
taọ ra. Tất nhiên, dù code đúng hay sai thì nó vẫn được tạo.<BR>
<DIV class=separator style="CLEAR: both; TEXT-ALIGN: center"><A 
style="MARGIN-LEFT: 1em; MARGIN-RIGHT: 1em; TEXT-DECORATION: none" 
href="http://4.bp.blogspot.com/-hrhYyW0nz8g/TjQorfyLO7I/AAAAAAAAAS4/CE2DZz_UQRs/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%25EF%25BC%25882011-07-31+0.51.53%25EF%25BC%2589.png" 
imageanchor="1"><IMG 
style="PADDING-RIGHT: 8px; PADDING-LEFT: 8px; PADDING-BOTTOM: 8px; BORDER-TOP-STYLE: none; PADDING-TOP: 8px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; POSITION: relative; BORDER-BOTTOM-STYLE: none" 
src="http://4.bp.blogspot.com/-hrhYyW0nz8g/TjQorfyLO7I/AAAAAAAAAS4/CE2DZz_UQRs/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%25EF%25BC%25882011-07-31+0.51.53%25EF%25BC%2589.png" 
border=0></A></DIV>
2.5 Chạy chương trình trên Eclipse, kết quả như sau:<BR>
<DIV class=separator style="CLEAR: both; TEXT-ALIGN: center"><A 
style="MARGIN-LEFT: 1em; COLOR: rgb(33,152,166); MARGIN-RIGHT: 1em; TEXT-DECORATION: none" 
href="http://4.bp.blogspot.com/-EC04N1AVh-4/TjQpAUU5OEI/AAAAAAAAAS8/5_tUC0UOn-k/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%25EF%25BC%25882011-07-31+0.53.18%25EF%25BC%2589.png" 
imageanchor="1"><IMG 
style="PADDING-RIGHT: 8px; PADDING-LEFT: 8px; PADDING-BOTTOM: 8px; BORDER-TOP-STYLE: none; PADDING-TOP: 8px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; POSITION: relative; BORDER-BOTTOM-STYLE: none" 
height=194 
src="http://4.bp.blogspot.com/-EC04N1AVh-4/TjQpAUU5OEI/AAAAAAAAAS8/5_tUC0UOn-k/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%25EF%25BC%25882011-07-31+0.53.18%25EF%25BC%2589.png" 
width=320 border=0></A></DIV>
<DIV style="COLOR: red"><B><SPAN style="FONT-SIZE: large">Download toàn bộ 
code&nbsp;<A style="COLOR: rgb(33,152,166); TEXT-DECORATION: none" 
href="http://www.ziddu.com/download/15876807/hello-jni.zip.html%20">tai 
day</A></SPAN></B></DIV>ThanhTM<BR>TAÌ LIỆU THAM KHẢO<BR>1.<SPAN 
class=Apple-converted-space>&nbsp;</SPAN><A 
style="COLOR: rgb(33,152,166); TEXT-DECORATION: none" 
href="http://playwithopencv.blogspot.com/2011/02/android-ndk.html">http://playwithopencv.blogspot.com/2011/02/android-ndk.html</A><BR>2.&nbsp;<A 
style="COLOR: rgb(33,152,166); TEXT-DECORATION: none" 
href="http://mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step/">http://mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step/</A><BR>3.<SPAN 
class=Apple-converted-space>&nbsp;</SPAN><A 
style="COLOR: rgb(33,152,166); TEXT-DECORATION: none" 
href="http://www.techjini.com/blog/2009/10/26/android-ndk-an-introduction-how-to-work-with-ndk/">http://www.techjini.com/blog/2009/10/26/android-ndk-an-introduction-how-to-work-with-ndk/</A><BR>
<BLOCKQUOTE 
style="PADDING-RIGHT: 20px; PADDING-LEFT: 50px; PADDING-BOTTOM: 20px; MARGIN: 0px 20px; FONT: 0.9em Helvetica, verdana, serif, Georgia, 'Times New Roman'; COLOR: rgb(199,202,207); PADDING-TOP: 20px; BACKGROUND-COLOR: rgb(72,75,82); background-origin: initial; background-clip: initial">
  <P style="MARGIN: 0px; PADDING-TOP: 10px"><STRONG>cd /hoge<BR>tar -zxvf 
  opencv-1.0.0.tar.gz<BR>cd 
opencv-1.0.0</STRONG></P></BLOCKQUOTE></div></DIV></body>
</html>
